home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / openoffice / program / pythonscript.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2007-04-29  |  31.1 KB  |  834 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. import uno
  5. import unohelper
  6. import sys
  7. import imp
  8. import time
  9.  
  10. class LogLevel:
  11.     NONE = 0
  12.     ERROR = 1
  13.     DEBUG = 2
  14.  
  15. LogLevel.use = LogLevel.NONE
  16. LOG_STDOUT = True
  17. ENABLE_EDIT_DIALOG = False
  18.  
  19. def logLevel2String(level):
  20.     ret = ' NONE'
  21.     if level == LogLevel.ERROR:
  22.         ret = 'ERROR'
  23.     elif level >= LogLevel.DEBUG:
  24.         ret = 'DEBUG'
  25.     
  26.     return ret
  27.  
  28.  
  29. def getLogTarget():
  30.     ret = sys.stdout
  31.     if not LOG_STDOUT:
  32.         pathSubst = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.util.PathSubstitution')
  33.         userInstallation = pathSubst.getSubstituteVariableValue('user')
  34.         if len(userInstallation) > 0:
  35.             systemPath = uno.fileUrlToSystemPath(userInstallation + '/Scripts/python/log.txt')
  36.             ret = file(systemPath, 'a')
  37.         
  38.     
  39.     return ret
  40.  
  41.  
  42. class Logger(LogLevel):
  43.     
  44.     def __init__(self, target):
  45.         self.target = target
  46.  
  47.     
  48.     def isDebugLevel(self):
  49.         return self.use >= self.DEBUG
  50.  
  51.     
  52.     def debug(self, msg):
  53.         if self.isDebugLevel():
  54.             self.log(self.DEBUG, msg)
  55.         
  56.  
  57.     
  58.     def isErrorLevel(self):
  59.         return self.use >= self.ERROR
  60.  
  61.     
  62.     def error(self, msg):
  63.         if self.isErrorLevel():
  64.             self.log(self.ERROR, msg)
  65.         
  66.  
  67.     
  68.     def log(self, level, msg):
  69.         self.target.write(time.asctime() + ' [' + logLevel2String(level) + '] ' + msg + '\n')
  70.         self.target.flush()
  71.  
  72.  
  73. log = Logger(getLogTarget())
  74. log.debug('pythonscript loading')
  75. from com.sun.star.uno import RuntimeException
  76. from com.sun.star.lang import XServiceInfo
  77. from com.sun.star.io import IOException
  78. from com.sun.star.ucb import CommandAbortedException
  79. from com.sun.star.beans import XPropertySet
  80. from com.sun.star.container import XNameContainer
  81. from com.sun.star.xml.sax import XDocumentHandler, InputSource
  82. from com.sun.star.uno import Exception as UnoException
  83. from com.sun.star.script import XInvocation
  84. from com.sun.star.awt import XActionListener
  85. from com.sun.star.script.provider import XScriptProvider, XScript, XScriptContext, ScriptFrameworkErrorException
  86. from com.sun.star.script.browse import XBrowseNode
  87. from com.sun.star.script.browse.BrowseNodeTypes import SCRIPT, CONTAINER, ROOT
  88. LANGUAGENAME = 'Python'
  89. GLOBAL_SCRIPTCONTEXT_NAME = 'XSCRIPTCONTEXT'
  90. CALLABLE_CONTAINER_NAME = 'g_exportedScripts'
  91. g_ImplementationHelper = unohelper.ImplementationHelper()
  92. g_implName = 'org.openoffice.pyuno.LanguageScriptProviderFor' + LANGUAGENAME
  93. BLOCK_SIZE = 65536
  94.  
  95. def readTextFromStream(inputStream):
  96.     code = uno.ByteSequence('')
  97.     while True:
  98.         (read, out) = inputStream.readBytes(None, BLOCK_SIZE)
  99.         code = code + out
  100.         if read < BLOCK_SIZE:
  101.             break
  102.             continue
  103.     return code.value
  104.  
  105.  
  106. class ModuleEntry:
  107.     
  108.     def __init__(self, lastRead, module):
  109.         self.lastRead = lastRead
  110.         self.module = module
  111.  
  112.  
  113.  
  114. def hasChanged(oldDate, newDate):
  115.     if not newDate.Year > oldDate.Year and newDate.Month > oldDate.Month and newDate.Day > oldDate.Day and newDate.Hours > oldDate.Hours and newDate.Minutes > oldDate.Minutes and newDate.Seconds > oldDate.Seconds:
  116.         pass
  117.     return newDate.HundredthSeconds > oldDate.HundredthSeconds
  118.  
  119.  
  120. def ensureCodeEndsWithLinefeed(code):
  121.     if not code.endswith('\n'):
  122.         code = code + '\n'
  123.     
  124.     return code
  125.  
  126.  
  127. class ScriptContext(unohelper.Base):
  128.     
  129.     def __init__(self, ctx, doc):
  130.         self.ctx = ctx
  131.         self.doc = doc
  132.  
  133.     
  134.     def getDocument(self):
  135.         return self.getDesktop().getCurrentComponent()
  136.  
  137.     
  138.     def getDesktop(self):
  139.         return self.ctx.ServiceManager.createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx)
  140.  
  141.     
  142.     def getComponentContext(self):
  143.         return self.ctx
  144.  
  145.  
  146.  
  147. class ProviderContext:
  148.     
  149.     def __init__(self, storageType, sfa, uriHelper, scriptContext):
  150.         self.storageType = storageType
  151.         self.sfa = sfa
  152.         self.uriHelper = uriHelper
  153.         self.scriptContext = scriptContext
  154.         self.modules = { }
  155.         self.rootUrl = None
  156.         self.mapPackageName2Path = None
  157.  
  158.     
  159.     def getTransientPartFromUrl(self, url):
  160.         rest = url.replace(self.rootUrl, '', 1).replace('/', '', 1)
  161.         return rest[0:rest.find('/')]
  162.  
  163.     
  164.     def getPackageNameFromUrl(self, url):
  165.         rest = url.replace(self.rootUrl, '', 1).replace('/', '', 1)
  166.         start = rest.find('/') + 1
  167.         return rest[start:rest.find('/', start)]
  168.  
  169.     
  170.     def removePackageByUrl(self, url):
  171.         items = self.mapPackageName2Path.items()
  172.         for i in items:
  173.             if url in i[1].pathes:
  174.                 self.mapPackageName2Path.pop(i[0])
  175.                 break
  176.                 continue
  177.         
  178.  
  179.     
  180.     def addPackageByUrl(self, url):
  181.         packageName = self.getPackageNameFromUrl(url)
  182.         transientPart = self.getTransientPartFromUrl(url)
  183.         if log.isDebugLevel():
  184.             pass
  185.         log.debug('addPackageByUrl : ' + packageName + ', ' + transientPart)
  186.         if self.mapPackageName2Path.has_key(packageName):
  187.             package = self.mapPackageName2Path[packageName]
  188.             package.pathes = package.pathes + (url,)
  189.         else:
  190.             package = Package((url,), transientPart)
  191.             self.mapPackageName2Path[packageName] = package
  192.  
  193.     
  194.     def isUrlInPackage(self, url):
  195.         values = self.mapPackageName2Path.values()
  196.         for i in values:
  197.             if url in i.pathes:
  198.                 return True
  199.                 continue
  200.         
  201.         return False
  202.  
  203.     
  204.     def setPackageAttributes(self, mapPackageName2Path, rootUrl):
  205.         self.mapPackageName2Path = mapPackageName2Path
  206.         self.rootUrl = rootUrl
  207.  
  208.     
  209.     def getPersistentUrlFromStorageUrl(self, url):
  210.         ret = url
  211.         if self.rootUrl:
  212.             pos = len(self.rootUrl) + 1
  213.             ret = url[0:pos] + url[url.find('/', pos) + 1:len(url)]
  214.         
  215.         if log.isDebugLevel():
  216.             pass
  217.         log.debug('getPersistentUrlFromStorageUrl ' + url + ' -> ' + ret)
  218.         return ret
  219.  
  220.     
  221.     def getStorageUrlFromPersistentUrl(self, url):
  222.         ret = url
  223.         if self.rootUrl:
  224.             pos = len(self.rootUrl) + 1
  225.             packageName = url[pos:url.find('/', pos + 1)]
  226.             package = self.mapPackageName2Path[packageName]
  227.             ret = url[0:pos] + package.transientPathElement + '/' + url[pos:len(url)]
  228.         
  229.         if log.isDebugLevel():
  230.             pass
  231.         log.debug('getStorageUrlFromPersistentUrl ' + url + ' -> ' + ret)
  232.         return ret
  233.  
  234.     
  235.     def getModuleByUrl(self, url):
  236.         entry = self.modules.get(url)
  237.         load = True
  238.         lastRead = self.sfa.getDateTimeModified(url)
  239.         if entry:
  240.             if hasChanged(entry.lastRead, lastRead):
  241.                 if log.isDebugLevel():
  242.                     pass
  243.                 log.debug('file ' + url + ' has changed, reloading')
  244.             else:
  245.                 load = False
  246.         
  247.         if load:
  248.             if log.isDebugLevel():
  249.                 pass
  250.             log.debug('opening >' + url + '<')
  251.             code = readTextFromStream(self.sfa.openFileRead(url))
  252.             code = ensureCodeEndsWithLinefeed(code)
  253.             entry = ModuleEntry(lastRead, imp.new_module('ooo_script_framework'))
  254.             entry.module.__dict__[GLOBAL_SCRIPTCONTEXT_NAME] = self.scriptContext
  255.             exec code in entry.module.__dict__
  256.             entry.module.__file__ = url
  257.             self.modules[url] = entry
  258.             if log.isDebugLevel():
  259.                 pass
  260.             log.debug('mapped ' + url + ' to ' + str(entry.module))
  261.         
  262.         return entry.module
  263.  
  264.  
  265.  
  266. def isScript(candidate):
  267.     ret = False
  268.     if isinstance(candidate, type(isScript)):
  269.         ret = True
  270.     
  271.     return ret
  272.  
  273.  
  274. class ScriptBrowseNode(unohelper.Base, XBrowseNode, XPropertySet, XInvocation, XActionListener):
  275.     
  276.     def __init__(self, provCtx, uri, fileName, funcName, func):
  277.         self.fileName = fileName
  278.         self.funcName = funcName
  279.         self.provCtx = provCtx
  280.         self.func = func
  281.         self.uri = uri
  282.  
  283.     
  284.     def getName(self):
  285.         return self.funcName
  286.  
  287.     
  288.     def getChildNodes(self):
  289.         return ()
  290.  
  291.     
  292.     def hasChildNodes(self):
  293.         return False
  294.  
  295.     
  296.     def getType(self):
  297.         return SCRIPT
  298.  
  299.     
  300.     def getPropertyValue(self, name):
  301.         ret = None
  302.         if name == 'URI':
  303.             ret = self.provCtx.uriHelper.getScriptURI(self.provCtx.getPersistentUrlFromStorageUrl(self.uri + '$' + self.funcName))
  304.         elif name == 'Description':
  305.             ret = getattr(self.func, '__doc__', None)
  306.         elif name == 'Editable' and ENABLE_EDIT_DIALOG:
  307.             ret = not self.provCtx.sfa.isReadOnly(self.uri)
  308.         
  309.         if log.isDebugLevel():
  310.             pass
  311.         log.debug('ScriptBrowseNode.getPropertyValue called for ' + name + ', returning ' + str(ret))
  312.         return ret
  313.  
  314.     
  315.     def setPropertyValue(self, name, value):
  316.         if log.isDebugLevel():
  317.             pass
  318.         log.debug('ScriptBrowseNode.setPropertyValue called ' + name + '=' + str(value))
  319.  
  320.     
  321.     def getPropertySetInfo(self):
  322.         if log.isDebugLevel():
  323.             pass
  324.         log.debug('ScriptBrowseNode.getPropertySetInfo called ')
  325.  
  326.     
  327.     def getIntrospection(self):
  328.         pass
  329.  
  330.     
  331.     def invoke(self, name, params, outparamindex, outparams):
  332.         if name == 'Editable':
  333.             servicename = 'com.sun.star.awt.DialogProvider'
  334.             ctx = self.provCtx.scriptContext.getComponentContext()
  335.             dlgprov = ctx.ServiceManager.createInstanceWithContext(servicename, ctx)
  336.             self.editor = dlgprov.createDialog('vnd.sun.star.script:' + 'ScriptBindingLibrary.MacroEditor?location=application')
  337.             code = readTextFromStream(self.provCtx.sfa.openFileRead(self.uri))
  338.             code = ensureCodeEndsWithLinefeed(code)
  339.             self.editor.getControl('EditorTextField').setText(code)
  340.             self.editor.getControl('RunButton').setActionCommand('Run')
  341.             self.editor.getControl('RunButton').addActionListener(self)
  342.             self.editor.getControl('SaveButton').setActionCommand('Save')
  343.             self.editor.getControl('SaveButton').addActionListener(self)
  344.             self.editor.execute()
  345.         
  346.  
  347.     
  348.     def actionPerformed(self, event):
  349.         
  350.         try:
  351.             if event.ActionCommand == 'Run':
  352.                 code = self.editor.getControl('EditorTextField').getText()
  353.                 code = ensureCodeEndsWithLinefeed(code)
  354.                 mod = imp.new_module('ooo_script_framework')
  355.                 mod.__dict__[GLOBAL_SCRIPTCONTEXT_NAME] = self.provCtx.scriptContext
  356.                 exec code in mod.__dict__
  357.                 values = mod.__dict__.get(CALLABLE_CONTAINER_NAME, None)
  358.                 if not values:
  359.                     values = mod.__dict__.values()
  360.                 
  361.                 for i in values:
  362.                     if isScript(i):
  363.                         i()
  364.                         break
  365.                         continue
  366.                 
  367.             elif event.ActionCommand == 'Save':
  368.                 toWrite = uno.ByteSequence(str(self.editor.getControl('EditorTextField').getText().encode(sys.getdefaultencoding())))
  369.                 copyUrl = self.uri + '.orig'
  370.                 self.provCtx.sfa.move(self.uri, copyUrl)
  371.                 out = self.provCtx.sfa.openFileWrite(self.uri)
  372.                 out.writeBytes(toWrite)
  373.                 out.close()
  374.                 self.provCtx.sfa.kill(copyUrl)
  375.         except Exception:
  376.             e = None
  377.             log.error(str(e))
  378.  
  379.  
  380.     
  381.     def setValue(self, name, value):
  382.         pass
  383.  
  384.     
  385.     def getValue(self, name):
  386.         pass
  387.  
  388.     
  389.     def hasMethod(self, name):
  390.         return False
  391.  
  392.     
  393.     def hasProperty(self, name):
  394.         return False
  395.  
  396.  
  397.  
  398. class FileBrowseNode(unohelper.Base, XBrowseNode):
  399.     
  400.     def __init__(self, provCtx, uri, name):
  401.         self.provCtx = provCtx
  402.         self.uri = uri
  403.         self.name = name
  404.         self.module = None
  405.  
  406.     
  407.     def getName(self):
  408.         return self.name
  409.  
  410.     
  411.     def getChildNodes(self):
  412.         ret = ()
  413.         
  414.         try:
  415.             self.module = self.provCtx.getModuleByUrl(self.uri)
  416.             values = self.module.__dict__.get(CALLABLE_CONTAINER_NAME, None)
  417.             if not isinstance(values, type(())):
  418.                 values = self.module.__dict__.values()
  419.             
  420.             scriptNodeList = []
  421.             for i in values:
  422.                 if isScript(i):
  423.                     scriptNodeList.append(ScriptBrowseNode(self.provCtx, self.uri, self.name, i.__name__, i))
  424.                     continue
  425.             
  426.             ret = tuple(scriptNodeList)
  427.             if log.isDebugLevel():
  428.                 pass
  429.             log.debug('returning ' + str(len(ret)) + ' ScriptChildNodes on ' + self.uri)
  430.         except Exception:
  431.             e = None
  432.             log.error('Error ' + str(e) + ' while evaluating ' + self.uri)
  433.             raise e
  434.  
  435.         return ret
  436.  
  437.     
  438.     def hasChildNodes(self):
  439.         
  440.         try:
  441.             return len(self.getChildNodes()) > 0
  442.         except Exception:
  443.             e = None
  444.             return False
  445.  
  446.  
  447.     
  448.     def getType(self):
  449.         return CONTAINER
  450.  
  451.  
  452.  
  453. class DirBrowseNode(unohelper.Base, XBrowseNode):
  454.     
  455.     def __init__(self, provCtx, name, rootUrl):
  456.         self.provCtx = provCtx
  457.         self.name = name
  458.         self.rootUrl = rootUrl
  459.  
  460.     
  461.     def getName(self):
  462.         return self.name
  463.  
  464.     
  465.     def getChildNodes(self):
  466.         
  467.         try:
  468.             if log.isDebugLevel():
  469.                 pass
  470.             log.debug('DirBrowseNode.getChildNodes called for ' + self.rootUrl)
  471.             contents = self.provCtx.sfa.getFolderContents(self.rootUrl, True)
  472.             browseNodeList = []
  473.             for i in contents:
  474.                 if i.endswith('.py'):
  475.                     if log.isDebugLevel():
  476.                         pass
  477.                     log.debug('adding filenode ' + i)
  478.                     browseNodeList.append(FileBrowseNode(self.provCtx, i, i[i.rfind('/') + 1:len(i) - 3]))
  479.                     continue
  480.                 if self.provCtx.sfa.isFolder(i):
  481.                     if log.isDebugLevel():
  482.                         pass
  483.                     log.debug('adding DirBrowseNode ' + i)
  484.                     browseNodeList.append(DirBrowseNode(self.provCtx, i[i.rfind('/') + 1:len(i)], i))
  485.                     continue
  486.             
  487.             return tuple(browseNodeList)
  488.         except Exception:
  489.             e = None
  490.             log.error('DirBrowseNode error: ' + str(e) + ' while evaluating ' + self.rootUrl)
  491.             return ()
  492.  
  493.  
  494.     
  495.     def hasChildNodes(self):
  496.         return True
  497.  
  498.     
  499.     def getType(self):
  500.         return CONTAINER
  501.  
  502.     
  503.     def getScript(self, uri):
  504.         log.debug('DirBrowseNode getScript ' + uri + ' invoked')
  505.         raise IllegalArgumentException("DirBrowseNode couldn't instantiate script " + uri, self, 0)
  506.  
  507.  
  508.  
  509. class ManifestHandler(XDocumentHandler, unohelper.Base):
  510.     
  511.     def __init__(self, rootUrl):
  512.         self.rootUrl = rootUrl
  513.  
  514.     
  515.     def startDocument(self):
  516.         self.urlList = []
  517.  
  518.     
  519.     def endDocument(self):
  520.         pass
  521.  
  522.     
  523.     def startElement(self, name, attlist):
  524.         if name == 'manifest:file-entry':
  525.             if attlist.getValueByName('manifest:media-type') == 'application/vnd.sun.star.framework-script':
  526.                 self.urlList.append(self.rootUrl + '/' + attlist.getValueByName('manifest:full-path'))
  527.             
  528.         
  529.  
  530.     
  531.     def endElement(self, name):
  532.         pass
  533.  
  534.     
  535.     def characters(self, chars):
  536.         pass
  537.  
  538.     
  539.     def ignoreableWhitespace(self, chars):
  540.         pass
  541.  
  542.     
  543.     def setDocumentLocator(self, locator):
  544.         pass
  545.  
  546.  
  547.  
  548. def getPathesFromPackage(rootUrl, sfa):
  549.     ret = ()
  550.     
  551.     try:
  552.         fileUrl = rootUrl + '/META-INF/manifest.xml'
  553.         inputStream = sfa.openFileRead(fileUrl)
  554.         parser = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.xml.sax.Parser')
  555.         handler = ManifestHandler(rootUrl)
  556.         parser.setDocumentHandler(handler)
  557.         parser.parseStream(InputSource(inputStream, '', fileUrl, fileUrl))
  558.         ret = tuple(handler.urlList)
  559.     except UnoException:
  560.         e = None
  561.         log.debug('getPathesFromPackage ' + fileUrl + ' Exception: ' + str(e))
  562.  
  563.     return ret
  564.  
  565.  
  566. class Package:
  567.     
  568.     def __init__(self, pathes, transientPathElement):
  569.         self.pathes = pathes
  570.         self.transientPathElement = transientPathElement
  571.  
  572.  
  573.  
  574. def getPackageName2PathMap(sfa, rootUrl):
  575.     ret = { }
  576.     contents = sfa.getFolderContents(rootUrl, True)
  577.     for i in contents:
  578.         if sfa.isFolder(i):
  579.             transientPathElement = lastElement(i)
  580.             subcontents = sfa.getFolderContents(i, True)
  581.             for j in subcontents:
  582.                 if sfa.isFolder(j):
  583.                     pathes = getPathesFromPackage(j, sfa)
  584.                     if len(pathes) > 0:
  585.                         if log.isDebugLevel():
  586.                             pass
  587.                         log.debug('adding Package ' + transientPathElement + ' ' + str(pathes))
  588.                         ret[lastElement(j)] = Package(pathes, transientPathElement)
  589.                     
  590.                 len(pathes) > 0
  591.             
  592.     
  593.     return ret
  594.  
  595.  
  596. def lastElement(aStr):
  597.     return aStr[aStr.rfind('/') + 1:len(aStr)]
  598.  
  599.  
  600. class PackageBrowseNode(unohelper.Base, XBrowseNode):
  601.     
  602.     def __init__(self, provCtx, name, rootUrl):
  603.         self.provCtx = provCtx
  604.         self.name = name
  605.         self.rootUrl = rootUrl
  606.  
  607.     
  608.     def getName(self):
  609.         return self.name
  610.  
  611.     
  612.     def getChildNodes(self):
  613.         items = self.provCtx.mapPackageName2Path.items()
  614.         browseNodeList = []
  615.         for i in items:
  616.             if len(i[1].pathes) == 1:
  617.                 browseNodeList.append(DirBrowseNode(self.provCtx, i[0], i[1].pathes[0]))
  618.                 continue
  619.             for j in i[1].pathes:
  620.                 browseNodeList.append(DirBrowseNode(self.provCtx, i[0] + '.' + lastElement(j), j))
  621.             
  622.         
  623.         return tuple(browseNodeList)
  624.  
  625.     
  626.     def hasChildNodes(self):
  627.         return len(self.mapPackageName2Path) > 0
  628.  
  629.     
  630.     def getType(self):
  631.         return CONTAINER
  632.  
  633.     
  634.     def getScript(self, uri):
  635.         log.debug('DirBrowseNode getScript ' + uri + ' invoked')
  636.         raise IllegalArgumentException("PackageBrowseNode couldn't instantiate script " + uri, self, 0)
  637.  
  638.  
  639.  
  640. class PythonScript(unohelper.Base, XScript):
  641.     
  642.     def __init__(self, func, mod):
  643.         self.func = func
  644.         self.mod = mod
  645.  
  646.     
  647.     def invoke(self, args, out, outindex):
  648.         if log.isDebugLevel():
  649.             pass
  650.         log.debug('PythonScript.invoke ' + str(args))
  651.         ret = self.func(*args)
  652.         if log.isDebugLevel():
  653.             pass
  654.         log.debug('PythonScript.invoke ret = ' + str(ret))
  655.         return (ret, (), ())
  656.  
  657.  
  658.  
  659. def expandUri(uri):
  660.     if uri.startswith('vnd.sun.star.expand:'):
  661.         uri = uri.replace('vnd.sun.star.expand:', '', 1)
  662.         uri = uno.getComponentContext().getByName('/singletons/com.sun.star.util.theMacroExpander').expandMacros(uri)
  663.     
  664.     return uri
  665.  
  666.  
  667. class PythonScriptProvider(unohelper.Base, XBrowseNode, XScriptProvider, XNameContainer):
  668.     
  669.     def __init__(self, ctx, *args):
  670.         if log.isDebugLevel():
  671.             mystr = ''
  672.             for i in args:
  673.                 if len(mystr) > 0:
  674.                     mystr = mystr + ','
  675.                 
  676.                 mystr = mystr + str(i)
  677.             
  678.             log.debug('Entering PythonScriptProvider.ctor' + mystr)
  679.         
  680.         storageType = ''
  681.         if isinstance(args[0], unicode):
  682.             storageType = args[0]
  683.         else:
  684.             storageType = args[0].SCRIPTING_DOC_URI
  685.         isPackage = storageType.endswith(':uno_packages')
  686.         
  687.         try:
  688.             urlHelper = ctx.ServiceManager.createInstanceWithArgumentsAndContext('com.sun.star.script.provider.ScriptURIHelper', (LANGUAGENAME, storageType), ctx)
  689.             if log.isDebugLevel():
  690.                 pass
  691.             log.debug('got urlHelper ' + str(urlHelper))
  692.             rootUrl = urlHelper.getRootStorageURI()
  693.             if log.isDebugLevel():
  694.                 pass
  695.             log.debug(storageType + ' transformed to ' + rootUrl)
  696.             ucbService = 'com.sun.star.ucb.SimpleFileAccess'
  697.             sfa = ctx.ServiceManager.createInstanceWithContext(ucbService, ctx)
  698.             if not sfa:
  699.                 log.debug("PythonScriptProvider couldn't instantiate " + ucbService)
  700.                 raise RuntimeException("PythonScriptProvider couldn't instantiate " + ucbService, self)
  701.             
  702.             self.provCtx = ProviderContext(storageType, sfa, urlHelper, ScriptContext(uno.getComponentContext(), None))
  703.             if isPackage:
  704.                 mapPackageName2Path = getPackageName2PathMap(sfa, rootUrl)
  705.                 self.provCtx.setPackageAttributes(mapPackageName2Path, rootUrl)
  706.                 self.dirBrowseNode = PackageBrowseNode(self.provCtx, LANGUAGENAME, rootUrl)
  707.             else:
  708.                 self.dirBrowseNode = DirBrowseNode(self.provCtx, LANGUAGENAME, rootUrl)
  709.         except Exception:
  710.             e = None
  711.             log.debug('PythonScriptProvider could not be instantiated because of : ' + str(e))
  712.             raise e
  713.  
  714.  
  715.     
  716.     def getName(self):
  717.         return self.dirBrowseNode.getName()
  718.  
  719.     
  720.     def getChildNodes(self):
  721.         return self.dirBrowseNode.getChildNodes()
  722.  
  723.     
  724.     def hasChildNodes(self):
  725.         return self.dirBrowseNode.hasChildNodes()
  726.  
  727.     
  728.     def getType(self):
  729.         return self.dirBrowseNode.getType()
  730.  
  731.     
  732.     def getScript(self, uri):
  733.         log.debug('DirBrowseNode getScript ' + uri + ' invoked')
  734.         raise IllegalArgumentException("DirBrowseNode couldn't instantiate script " + uri, self, 0)
  735.  
  736.     
  737.     def getScript(self, scriptUri):
  738.         
  739.         try:
  740.             if log.isDebugLevel():
  741.                 pass
  742.             log.debug('getScript ' + scriptUri + ' invoked')
  743.             storageUri = self.provCtx.getStorageUrlFromPersistentUrl(self.provCtx.uriHelper.getStorageURI(scriptUri))
  744.             if log.isDebugLevel():
  745.                 pass
  746.             log.debug('getScript: storageUri = ' + storageUri)
  747.             fileUri = storageUri[0:storageUri.find('$')]
  748.             funcName = storageUri[storageUri.find('$') + 1:len(storageUri)]
  749.             mod = self.provCtx.getModuleByUrl(fileUri)
  750.             if log.isDebugLevel():
  751.                 pass
  752.             log.debug(' got mod ' + str(mod))
  753.             func = mod.__dict__[funcName]
  754.             if log.isDebugLevel():
  755.                 pass
  756.             log.debug('got func ' + str(func))
  757.             return PythonScript(func, mod)
  758.         except Exception:
  759.             e = None
  760.             log.error(str(e))
  761.             raise ScriptFrameworkErrorException(str(e), self, scriptUri, LANGUAGENAME, 0)
  762.  
  763.  
  764.     
  765.     def getSupportedServices(self):
  766.         return g_ImplementationHelper.getSupportedServices(g_implName)
  767.  
  768.     
  769.     def supportsService(self, ServiceName):
  770.         return g_ImplementationHelper.supportsService(g_implName, ServiceName)
  771.  
  772.     
  773.     def getImplementationName(self):
  774.         return g_implName
  775.  
  776.     
  777.     def getByName(self, name):
  778.         log.debug('getByName called' + str(name))
  779.  
  780.     
  781.     def getElementNames(self):
  782.         log.debug('getElementNames called')
  783.         return ()
  784.  
  785.     
  786.     def hasByName(self, name):
  787.         
  788.         try:
  789.             log.debug('hasByName called ' + str(name))
  790.             uri = expandUri(name)
  791.             ret = self.provCtx.isUrlInPackage(uri)
  792.             log.debug('hasByName ' + uri + ' ' + str(ret))
  793.             return ret
  794.         except Exception:
  795.             e = None
  796.             log.debug('Error in hasByName:' + str(e))
  797.             return False
  798.  
  799.  
  800.     
  801.     def removeByName(self, name):
  802.         log.debug('removeByName called' + str(name))
  803.         uri = expandUri(name)
  804.         self.provCtx.removePackageByUrl(uri)
  805.         log.debug('removeByName called' + str(uri) + ' successful')
  806.  
  807.     
  808.     def insertByName(self, name, value):
  809.         log.debug('insertByName called ' + str(name) + ' ' + str(value))
  810.         uri = expandUri(name)
  811.         self.provCtx.addPackageByUrl(uri)
  812.         log.debug('insertByName called' + str(uri) + ' successful')
  813.  
  814.     
  815.     def replaceByName(self, name, value):
  816.         log.debug('replaceByName called ' + str(name) + ' ' + str(value))
  817.         removeByName(name)
  818.         insertByName(name)
  819.         log.debug('replaceByName called' + str(uri) + ' successful')
  820.  
  821.     
  822.     def getElementType(self):
  823.         log.debug('getElementType called')
  824.         return uno.getTypeByName('void')
  825.  
  826.     
  827.     def hasElements(self):
  828.         log.debug('hasElements got called')
  829.         return False
  830.  
  831.  
  832. g_ImplementationHelper.addImplementation(PythonScriptProvider, g_implName, ('com.sun.star.script.provider.LanguageScriptProvider', 'com.sun.star.script.provider.ScriptProviderFor' + LANGUAGENAME))
  833. log.debug('pythonscript finished intializing')
  834.